let r1 = 90; let r2 = 90; let m1 = 20; let m2 = 20; let a1 = Math.PI / 2; let a2 = Math.PI / 2; let a1_v = 0; let a2_v = 0; let g = 1; let px2 = -1; let py2 = -1; let cx, cy; function setup() { createCanvas(400, 400); cx = width / 2; cy = 100; extracanvas = createGraphics(400, 400); extracanvas.background(230); background(230); } function draw() { a1_a = (-g * (2 * m1 + m2) * sin(a1) - m2 * g * sin(a1 - 2 * a2) - 2 * sin(a1 - a2) * m2 * (a2_v * a2_v * r2 + a1_v * a1_v * r1 * cos(a1 - a2))) / (r1 * (2 * m1 + m2 - m2 * cos(2 * a1 - 2 * a2))); a2_a = (2 * sin(a1 - a2) * (a1_v * a1_v * r1 * (m1 + m2) + g * (m1 + m2) * cos(a1) + a2_v * a2_v * r2 * m2 * cos(a1 - a2))) / (r2 * (2 * m1 + m2 - m2 * cos(2 * a1 - 2 * a2))); //a2_a=0; ///background(230); image(extracanvas, 0, 0); //stroke(0); //strokeWeight(2); translate(cx, cy); let x1 = r1 * sin(a1); let y1 = r1 * cos(a1); let x2 = x1 + r2 * sin(a2); let y2 = y1 + r2 * cos(a2); line(0, 0, x1, y1); fill(0); ellipse(x1, y1, m1, m1); line(x1, y1, x2, y2); fill(0); ellipse(x2, y2, m2, m2); //a1+=a1_v; //a2+=a2_v; a1_v += a1_a; a2_v += a2_a; a1 += a1_v; a2 += a2_v; extracanvas.beginShape(); //extracanvas.translate(300,50); extracanvas.strokeWeight(1); extracanvas.stroke(0); if(frameCount > 1) { extracanvas.line(px2 + 200, py2 + 100, x2 + 200, y2 + 100); } extracanvas.endShape(); //image(extracanvas,0,0); px2 = x2; py2 = y2; }